#ifndef _WX_RECGUARD_H_
#define _WX_RECGUARD_H_

#include "wx/defs.h"

// ----------------------------------------------------------------------------
// wxRecursionGuardFlag is used with wxRecursionGuard
// ----------------------------------------------------------------------------

typedef int wxRecursionGuardFlag;

// ----------------------------------------------------------------------------
// wxRecursionGuard is the simplest way to protect a function from reentrancy
// ----------------------------------------------------------------------------

class wxRecursionGuard {
  public:
    wxRecursionGuard( wxRecursionGuardFlag& flag )
      : m_flag( flag ) {
      m_isInside = flag++ != 0;
    }

    ~wxRecursionGuard() {
      wxASSERT_MSG( m_flag > 0, wxT( "unbalanced wxRecursionGuards!?" ) );
      m_flag--;
    }

    bool IsInside() const { return m_isInside; }

  private:
    wxRecursionGuardFlag& m_flag;

    // true if the flag had been already set when we were created
    bool m_isInside;
};

#endif // _WX_RECGUARD_H_

